/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dao.implementacoes;

import dao.Conexao;
import dao.ImobiliariaDaoException;
import dao.AdministradorDao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import model.Administrador;

/**
 *
 * @author cristiane
 */
public class AdministradorDaoImpl implements AdministradorDao{

    private Connection conn;

    public AdministradorDaoImpl() throws ImobiliariaDaoException{
        try{
            this.conn = Conexao.getConnection();
        }catch(Exception e){
            throw new ImobiliariaDaoException("Erro: " + e.getMessage());
        }
    }

    public void salvarAdministrador(Administrador administrador) throws ImobiliariaDaoException {
        PreparedStatement ps = null;
        Connection conn1 = null;

        if(administrador == null){
            throw new ImobiliariaDaoException("Nenhum Livro foi informado!");
        }

        try{
            String sql = "INSERT INTO administrador VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
            conn1 = conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, administrador.getCodigo());
            ps.setString(2, administrador.getTipo());
            ps.setString(3, administrador.getNome());
            ps.setString(4, administrador.getCpf());
            ps.setString(5, administrador.getEmail());
            ps.setString(6, administrador.getTelefone1());
            ps.setString(7, administrador.getTelefone2());
            ps.setString(8, administrador.getTelefone3());
            ps.setString(9, administrador.getTelefone4());
            ps.setString(10, administrador.getUsuario());
            ps.setString(11, administrador.getSenha());
            ps.executeUpdate();
        }catch(SQLException e){
            throw new ImobiliariaDaoException("Erro ao salvar novo administrador " + e);
        }finally{
            Conexao.closeConnection(conn1, ps);
        }

        
    }

    public void atualizarAdministrador(Administrador administrador) throws ImobiliariaDaoException {
        PreparedStatement ps = null;
        Connection conn1 = null;
        if(administrador == null)
            throw new ImobiliariaDaoException("Nenhum administrador foi informado!");

        try{
        String sql = "UPDATE administrador set tipo=?, nome=?, cpf=?, email=?, telefone1=?, telefone2=?, " +
                "telefone3=?, telefone4=?, usuario=?, senha=? WHERE codigo=?";
        conn1 = conn;
        ps = conn1.prepareStatement(sql);
        ps.setString(1, administrador.getTipo());
        ps.setString(3, administrador.getNome());
        ps.setString(4, administrador.getCpf());
        ps.setString(5, administrador.getEmail());
        ps.setString(6, administrador.getTelefone1());
        ps.setString(7, administrador.getTelefone2());
        ps.setString(8, administrador.getTelefone3());
        ps.setString(9, administrador.getTelefone4());
        ps.setString(10, administrador.getUsuario());
        ps.setString(11, administrador.getSenha());
        ps.setString(12, administrador.getCodigo());

        ps.executeUpdate();
        }catch(SQLException e){
            throw new ImobiliariaDaoException("Erro ao atualizar administrador " + e);
        }finally{
            Conexao.closeConnection(conn1, ps);
        }

    }

    public void excAdministrador(Administrador administrador) throws ImobiliariaDaoException {
        PreparedStatement ps = null;
        Connection conn1 = null;
        if(administrador == null)
            throw new ImobiliariaDaoException("Nenhum administrador informado!");
        try{
            String sql = "DELETE FROM administrador WHERE codigo=? OR CPF=?";
            conn1 = conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, administrador.getCodigo());
            ps.setString(2, administrador.getCpf());
            ps.executeUpdate();
        }catch(SQLException e){
            throw new ImobiliariaDaoException("Erro ao excluir administrador " + e);
        }finally{
            Conexao.closeConnection(conn1, ps);
        }
    }

    public Administrador procurarAdministradorCpf(String cpf) throws ImobiliariaDaoException {
        PreparedStatement ps = null;
        ResultSet rs = null;
        Connection conn1 = null;
        if(cpf == null)
            throw new ImobiliariaDaoException("Nenhum CPF foi informado!");
        try{
            String sql = "SELECT * FROM administrador WHERE cpf=?";
            conn1 = conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, cpf);
            rs = ps.executeQuery();
            if(!rs.next())
                throw new ImobiliariaDaoException("Nenhum administradro encontrado com o cpf " + cpf);
            String codigo = rs.getString("codigo");
            String tipo = rs.getString("nome");
            String nome = rs.getString("nome");
            String cpf1 = rs.getString("cpf");
            String email = rs.getString("email");
            String telefone1 = rs.getString("telefone1");
            String telefone2 = rs.getString("telefone2");
            String telefone3 = rs.getString("telefone3");
            String telefone4 = rs.getString("telefone4");
            String usuario = rs.getString("usuario");
            String senha = rs.getString("senha");
            Administrador administrador = new Administrador(codigo, tipo, nome, cpf, email, telefone1,
                    telefone2, telefone3, telefone4, usuario, senha);
            return administrador;
        }catch(SQLException e){
            throw new ImobiliariaDaoException("Erro ao procurar administrador " + e);
        }finally{
            Conexao.closeConnection(conn1, ps, rs);
        }
    }

    public Administrador procurarAdministradorCodigo(String codigo) throws ImobiliariaDaoException {
        PreparedStatement ps = null;
        ResultSet rs = null;
        Connection conn1 = null;
        if(codigo == null)
            throw new ImobiliariaDaoException("Nenhum codigo foi informado!");
        try{
            String sql = "SELECT * FROM administrador WHERE codigo=?";
            conn1 = conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, codigo);
            rs = ps.executeQuery();
            if(!rs.next())
                throw new ImobiliariaDaoException("Nenhum administradro encontrado com o codigo " + codigo);
            String codigo1 = rs.getString("codigo");
            String tipo = rs.getString("tipo");
            String nome = rs.getString("nome");
            String cpf = rs.getString("cpf");
            String email = rs.getString("email");
            String telefone1 = rs.getString("telefone1");
            String telefone2 = rs.getString("telefone2");
            String telefone3 = rs.getString("telefone3");
            String telefone4 = rs.getString("telefone4");
            String usuario = rs.getString("usuario");
            String senha = rs.getString("senha");
            Administrador administrador = new Administrador(codigo, tipo, nome, cpf, email, telefone1,
                    telefone2, telefone3, telefone4, usuario, senha);
            return administrador;
        }catch(SQLException e){
            throw new ImobiliariaDaoException("Erro ao procurar administrador " + e);
        }finally{
            Conexao.closeConnection(conn1, ps, rs);
        }
    }

    public Administrador procurarAdministrador(String usuario, String senha) throws ImobiliariaDaoException {
        PreparedStatement ps = null;
        ResultSet rs = null;
        Connection conn1 = null;
        if ((usuario == null) || (senha == null))
            throw new ImobiliariaDaoException("Usuario e/ou senha nao informado(s)!");
        try{
            String sql = "SELECT * FROM administrador WHERE usuario=? AND senha=?";
            conn1 = conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, usuario);
            ps.setString(2, senha);
            rs = ps.executeQuery();
            if(!rs.next())
                throw new ImobiliariaDaoException("Nenhum administrador encontrado com o nome de usuario " + usuario);
            String codigo = rs.getString("codigo");
            String tipo = rs.getString("tipo");
            String nome = rs.getString("nome");
            String cpf = rs.getString("cpf");
            String email = rs.getString("email");
            String telefone1 = rs.getString("telefone1");
            String telefone2 = rs.getString("telefone2");
            String telefone3 = rs.getString("telefone3");
            String telefone4 = rs.getString("telefone4");
            String usuario1 = rs.getString("usuario");
            String senha1 = rs.getString("senha");
            Administrador administrador = new Administrador(codigo, tipo, nome, cpf, email, telefone1,
                    telefone2, telefone3, telefone4, usuario, senha);
            return administrador;
        }catch(SQLException e){
            throw new ImobiliariaDaoException("Erro ao procurar administrador " + e);
        }finally{
            Conexao.closeConnection(conn1, ps, rs);
        }
    }

    public List todosAdministradors() throws ImobiliariaDaoException {
        PreparedStatement ps = null;
        ResultSet rs = null;
        Connection conn1 = null;
        try{
            String sql = "SELECT * FROM administrador";
            conn1 = conn;
            ps = conn1.prepareStatement(sql);
            rs = ps.executeQuery();
            List<Administrador> listaAdministrador= new ArrayList<Administrador>();
            while(rs.next()){
                 String codigo = rs.getString("codigo");
                 String tipo = rs.getString("tipo");
                 String nome = rs.getString("nome");
                 String cpf = rs.getString("cpf");
                 String email = rs.getString("email");
                 String telefone1 = rs.getString("telefone1");
                 String telefone2 = rs.getString("telefone2");
                 String telefone3 = rs.getString("telefone3");
                 String telefone4 = rs.getString("telefone4");
                 String usuario = rs.getString("usuario");
                 String senha = rs.getString("senha");
                 listaAdministrador.add(new Administrador(codigo, tipo, nome, cpf, email, telefone1,
                    telefone2, telefone3, telefone4, usuario, senha));
            }
            return listaAdministrador;

        }catch(SQLException e){
            throw new ImobiliariaDaoException("Erro ao listar administradores " + e);
        }finally{
            Conexao.closeConnection(conn1, ps, rs);
        }

    }

}
